package com.wmx.entity;

import org.hibernate.annotations.GenericGenerator;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import java.io.Serializable;
import java.util.Date;

/**
 * 1、电视机实体。应用启动时自动，配置文件中配置 ddl-auto: update：如果数据库不存在，则自动新建，否则不再新建。
 * 2、@Entity 注解支持 name 属性值可以指定映射的表名。
 * 3、javax.persistence.Entity、javax.persistence.Id 注解必须要写，否则启动报错！
 *
 * @author wangmaoxiong
 * Created by Administrator on 2019/2/27 0027.
 */
@Entity(name = "BAS_TV")
public class Tv implements Serializable {
    private static final long serialVersionUID = 222473339126877123L;
    /**
     * 标识为主键
     * 指定主键生成的方式，AUTO 由JPA自动生成。
     * 自动建表时，实体对象的属性名称对应表的字段名称，驼峰自动转为下划线，如 tvId -> tv_id
     * 注意：
     * 如果主键是数字类型，@GeneratedValue(strategy = GenerationType.AUTO) 时 jpa 会自动生成。
     * 如果主键是String类型，设置为auto，在调用 jpa 的 save 方法时会报错：JpaSystemException: Unknown integral data type for ids : java.lang.String
     * 解决办法1：去掉自动生成，自己手动设置主键。
     * 解决办法2：自定义主键生成器。
     * * @GeneratedValue(generator = "stringId") ：表示使用指定名称的主键生成器
     * * @GenericGenerator：自定义主键生成器，name 定义名称，strategy 关联自定义主键生成器。
     */
    @Id
    // @GeneratedValue(strategy = GenerationType.AUTO)
    @GeneratedValue(generator = "stringId")
    @GenericGenerator(name = "stringId", strategy = "com.wmx.config.StringIdGenerator")
    private String tvId;

    /**
     * 电视名称
     * 下面没标识的属性都会以默认值和数据库表的字段进行映射对应
     * 如果修改默认值，又不属性的，可以参考：https://blog.csdn.net/wangmx1993328/article/details/82048775
     * 中的 "domain Area" 部分
     */
    private String tvName;
    /**
     * 电视价格
     */
    private Float tvPrice;
    /**
     * 生产日期
     */
    private Date dateOfProduction;

    /**
     * 数据创建日期
     */
    private Date createTime;
    /**
     * 数据更新日期
     */
    private Date updateTime;
    /**
     * 数据是否删除(1是2否)
     */
    private Integer deleted;
    /**
     * 数据版本号
     */
    private Integer version;

    public Date getDateOfProduction() {
        return dateOfProduction;
    }

    public void setDateOfProduction(Date dateOfProduction) {
        this.dateOfProduction = dateOfProduction;
    }

    public String getTvId() {
        return tvId;
    }

    public void setTvId(String tvId) {
        this.tvId = tvId;
    }

    public String getTvName() {
        return tvName;
    }

    public void setTvName(String tvName) {
        this.tvName = tvName;
    }

    public Float getTvPrice() {
        return tvPrice;
    }

    public void setTvPrice(Float tvPrice) {
        this.tvPrice = tvPrice;
    }

    public Date getCreateTime() {
        return createTime;
    }

    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }

    public Date getUpdateTime() {
        return updateTime;
    }

    public void setUpdateTime(Date updateTime) {
        this.updateTime = updateTime;
    }

    public Integer getDeleted() {
        return deleted;
    }

    public void setDeleted(Integer deleted) {
        this.deleted = deleted;
    }

    public Integer getVersion() {
        return version;
    }

    public void setVersion(Integer version) {
        this.version = version;
    }

    @Override
    public String toString() {
        return "Tv{" +
                "tvId=" + tvId +
                ", tvName='" + tvName + '\'' +
                ", tvPrice=" + tvPrice +
                ", dateOfProduction=" + dateOfProduction +
                ", createTime=" + createTime +
                ", updateTime=" + updateTime +
                ", deleted=" + deleted +
                ", version=" + version +
                '}';
    }
}
